namespace Nice157Advices.Advices
{
    /// <summary>
    /// 33、避免在泛型类型中声明静态成员
    /// </summary>
    public static class _33
    {
        public static void Go ()
        {
            System.Console.WriteLine ("非泛型");
            var m1 = new MyList ();
            var m2 = new MyList ();
            System.Console.WriteLine ($"MyList: {MyList.Count}");

            System.Console.WriteLine ("泛型");
            var _m1 = new MyList2<int> ();
            var _m2 = new MyList2<int> ();
            var _m3 = new MyList2<string> ();
            System.Console.WriteLine ($"MyList<int>: {MyList2<int>.Count}");
            System.Console.WriteLine ($"MyList<string>: {MyList2<string>.Count}");

            /**
                实际上，随着你为T指定不同的数据类型，MyList<T>相应的也变成了不同的数据类型，在它们之间是不共享静态成员的。

                不过，从上文我们也觉察到了，若T所指定的数据类型是一致的，那么两个泛型对象间还是可以共享静态成员的，如上文的myList1和myList2。但是，为了规避因此而引起的混淆，仍旧建议在实际的编码工作中，尽量避免声明泛型类型的静态成员。
             */
        }

        private class MyList
        {
            public static int Count;
            public MyList ()
            {
                Count++;
            }
        }

        private class MyList2<T>
        {
            public static int Count;
            public MyList2 ()
            {
                Count++;
            }
        }
    }
}